import os
import tkinter as tk
from tkinter import messagebox
from tkinter.filedialog import askopenfilename, askdirectory
from pdf import manage_pdf


def window_gui():
    file_types = [('PDF文件', '.pdf'), ('Word或WPS doc文件', '.doc'), ('Word或WPS docx文件', '.docx')]

    # 清除输入输出按钮功能
    def del_in_out_put():
        input_file.set('')
        output_file.set('')
        return

    # 将文件路径保存到文件
    def write_links(filename, links):
        file = open(filename, 'w')
        links = str(links)
        file.write(links)
        file.close()

    # 输入框选择文件功能
    def chose_file():
        input_file_name = askopenfilename(filetypes=file_types)
        # print(str(input_file_name))
        # text.insert("end", "123123")
        if input_file_name != '':
            input_file.set('')
            input_file.set(str(input_file_name))
            write_links('temp_inputlinkes.txt', str(input_file_name))

    # 输出框选择文件功能
    def save_file():
        output_file_name = askdirectory()
        if output_file_name != '':
            output_file.set('')
            output_file.set(str(output_file_name))
            write_links('temp_outputlinkes.txt', str(output_file_name))

    # 主要处理函数入口
    def a4_to_a3_pdf():
        if os.path.exists('temp_inputlinkes.txt' and 'temp_outputlinkes.txt'):
            with open('temp_inputlinkes.txt', 'r') as file:
                in_file_link = file.read()
            file.close()

            with open('temp_outputlinkes.txt', 'r') as file:
                out_file_link = file.read()
            print(in_file_link, out_file_link)
            manage_pdf(in_file_link, out_file_link)
            os.remove('temp_inputlinkes.txt')
            os.remove('temp_outputlinkes.txt')
            messagebox.showinfo("成功", "已成功生成，位置在：{}".format(out_file_link))
            file.close()

    window = tk.Tk()
    # 标题
    window.title("文档处理（测试版） update.20240522")
    # 窗体尺寸
    window.geometry("+500+200")
    # 不可改变大小
    window.resizable(width=False, height=False)

    # 文本text-variable 用于存储输入输出路径
    input_file = tk.StringVar()
    # input_file.set("123")
    output_file = tk.StringVar()

    # 创建一个输入子容器monty，其父容器为window
    monty = tk.LabelFrame(window, text="== 输入位置 ==")
    monty.grid(column=0, row=0, padx=30, pady=(30, 15))  # 设置子容器在父容器的位置

    # 创建monty子容器里的按钮1
    # labelx = tk.Label(monty, text="Lab", font=("黑体", 30))
    # labelx.grid(row=0, column=0)

    input_entry = tk.Entry(monty, font=("黑体", 20), width=30, textvariable=input_file)
    input_entry.grid(row=0, column=1, padx=5, pady=5)

    input_button = tk.Button(monty, text="输入位置选择", font=("黑体", 15), command=chose_file)
    input_button.grid(row=0, column=2, padx=5, pady=5)  # 设置按钮在子容器的位置

    # 创建一个文件输出子容器 file_output
    file_output = tk.LabelFrame(window, text="==  输出位置 ==")
    file_output.grid(column=0, row=1, padx=15, pady=20)

    # 创建子容器里的按钮
    # labelx = tk.Label(file_output, text="Lab", font=("黑体", 30))
    # labelx.grid(row=0, column=0)

    output_entry = tk.Entry(file_output, font=("黑体", 20), width=30, textvariable=output_file)
    output_entry.grid(row=0, column=1, padx=5, pady=5)

    output_button = tk.Button(file_output, text="输出位置选择", font=("黑体", 15), command=save_file)
    output_button.grid(row=0, column=2, padx=5, pady=5)  # 设置按钮在子容器的位置

    # 创建一个处理子容器 chu_li
    chu_li = tk.LabelFrame(window, text="")
    chu_li.grid(column=0, row=2, padx=15, pady=(20, 5))

    # 创建子容器里的按钮
    chu_li_button = tk.Button(chu_li, text="开始执行", font=("黑体", 15),
                              command=a4_to_a3_pdf)
    chu_li_button.grid(row=0, column=1, padx=5, pady=5)  # 设置按钮在子容器的位置

    del_in_output_button = tk.Button(chu_li, text="清除输入输出", font=("黑体", 15), command=del_in_out_put)
    del_in_output_button.grid(row=0, column=2, padx=5, pady=5)

    del_log_button = tk.Button(chu_li, text="清除日志", font=("黑体", 15))
    del_log_button.grid(row=0, column=3, padx=5, pady=5)

    # 创建一个子容器 cmd_output
    log_output = tk.LabelFrame(window, text="==  状态输出 ==")
    log_output.grid(column=0, row=3, padx=15, pady=(0, 20))

    # 创建一个程序执行状态输出窗，用文本域
    # 创建一个纵向滚动的滚动条,打包到窗口右侧，铺满Y方向
    scrollbar = tk.Scrollbar(log_output, bg="red")  # orient默认为纵向
    scrollbar.grid(row=0, column=1)

    # 打包一个文本域到窗口，y方向滚动文本的监听丢给滚动条的set函数（文本域主动关联滚动条）
    # 高度和宽度确定的是字符个数（win)
    text = tk.Text(log_output, width=80, height=10, yscrollcommand=scrollbar.set)
    text.grid(row=0, column=0, padx=5, pady=5)

    # text.insert("end", "123123")
    # text.insert("insert", "1231231")

    # # 拉动滚动条时，改变文本域在y方向上的视图（滚动条主动关联文本域）
    scrollbar.config(command=text.yview)

    window.mainloop()


if __name__ == '__main__':
    window_gui()
